/*
###################################################
---------------------------------------------------
深圳市技新电子科技有限公司 www.jixin.pro  
---------------------------------------------------

---------------------------------------------------
工程硬件平台：智能小车 V1.0
工程程序版本：CleverCar_Telecontrol V1.0.0.0
---------------------------------------------------

---------------------------------------------------
硬件连接：请参考《智能小车原理图_V1.0》
---------------------------------------------------

---------------------------------------------------
程序功能：

根据遥控手柄的指令，前进/后退/转向
---------------------------------------------------
###################################################
*/

#include "stm32f10x.h"
#include "bit_band.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "timer.h"
#include "pwm.h"
#include "MotorDrive.h"
#include "trail.h"
#include "elude.h"
#include "spi.h"
#include "rf2G4.h"
#include "oled.h"



// 全局变量
//---------------------------------------------------------
u16 C_TIM2_IT_Update = 0 ;		// TIM3的定时计次

u16 C_2G4_Command = 0 ;			// 2.4G指令计时

u8  F_2G4_Command_Valid = 0 ;	// 2.4G命令有效标志位
//---------------------------------------------------------


int main(void)
{	
	// 主函数局部变量
	//----------------------------------------------
	u8  L_CNT = 0 ;				// 循环计数
	//----------------------------------------------
	
	
	// 注：程序中使用中断时，NVIC分组设置应尽量位于程序起始处，并且在设置后尽量不要再更改NVIC分组
	//------------------------------------------------------------------------------------------
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 	 //NVIC分组2：2位抢占优先级，2位响应优先级
	
	delay_Init();				// 延时初始化（注：调用延时函数之前，必须先调用delay_Init()将SysTick初始化）
	
	LED_Init_JX() ;				// 初始化LED硬件接口：LED_Green=PA_out(1)、LED_Bule=PA_out(2)
	
	TIM3_Time_Init();			// 定时器3初始化
	
	TIM1_PWM_Init_JX();			// TIM1_PWM初始化
	TIM4_PWM_Init_JX();			// TIM4_PWM初始化

	LED_Green = 0;
	
	delay_ms(2000);
	delay_ms(2000);
	delay_ms(2000);
	delay_ms(2000);
	delay_ms(2000);
	
		// 初始化OLED
	//-----------------------------------------
	OLED_Init();				// 初始化OLED  
	OLED_Clear(); 				// 清屏
	OLED_ShowString(0, 0, "2.4G Telecontrol");
	//-----------------------------------------
	
	//------------------------------------------------------
	RF2G4_Init();				// 2.4G无线射频初始化
	
	LED_Green = 1;
	LED_Bule = 0;
	
	// 判断SI24R1是否正常
	//---------------------------------------------
	if(RF2G4_Check())
	{ 
		LED_Bule = 1;
		for( L_CNT=0; L_CNT<10; L_CNT++ )	// 如果2.4G模块连接正常，则LED_Green上电后闪烁几次
		{
			LED_Green = !LED_Green ;
			delay_ms(500);
		}
		
		LED_Green = 1;
	}
	//------------------------------------
	
	RF2G4_RX_Mode();
	// 将SI24R1设置为接收模式
	//------------------------------------------------------
	
	//Trail_Input_Init_JX();	// 红外寻迹初始化
	
	//Elude_Input_Init_JX();	// 红外避障初始化
	
	
	while(1)
	{
		if(RF2G4_Rx_Packet(RF2G4_Receive_Data,14) == RX_SUCCESS)	// 判断是否接收到数据	
		{		
			//-----------------------------------------------
			F_2G4_Command_Valid = 1 ;	// 2.4G指令有效位置1
			
			C_2G4_Command = 0 ;			// 重新对2.4G指令计时
			//-----------------------------------------------
			
			
			// 根据接收到的指令执行相应动作
			//-------------------------------------------------------------------------------------------------
			if( RF2G4_Receive_Data[13]>118 && RF2G4_Receive_Data[13]<137 )	// 转向摇杆有动作时，不执行前进/后退
			{
				if( RF2G4_Receive_Data[12] >= 137 )
				{
					Car_forward (16 + (RF2G4_Receive_Data[12]-137)/1.4);	// 根据前进指令值，设定前进速度
				}
				
				else if( RF2G4_Receive_Data[12] <= 118 )
				{
					Car_backward (16 + (118-RF2G4_Receive_Data[12])/1.4);	// 根据后退指令值，设定前进速度
				}

				else 
					Car_Stop(CAR_FLAMEOUT);		// 小车熄火
			}
			//---------------------------------------------------------------
			
			
			// 右转
			else if( RF2G4_Receive_Data[13] <= 118 )
			{
				Car_Turn_Right(16 + (118-RF2G4_Receive_Data[13])/1.4);		// 根据右转指令值，设定右转速度
			}
			
			
			// 左转
			else // if( RF2G4_Receive_Data[13] >= 137 )
			{
				Car_Turn_Left(16 + (RF2G4_Receive_Data[13]-137)/1.4);		// 根据左转指令值，设定前进速度
			}
			//-------------------------------------------------------------------------------------------------
		}
		
		
		// 判断命令是否失效
		//---------------------------------------------------
		if( F_2G4_Command_Valid == 0)
		{
			Car_Stop(CAR_FLAMEOUT);		// 命令失效，小车熄火
		}
		//---------------------------------------------------
		
	}// while(1)
	
}// int main(void)


